<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>CAD-Tool: /home/manish/Desktop/Manish_CAD_Tool/src/faceloop_generator.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">CAD-Tool
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">faceloop_generator.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="faceloop__generator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="faceloop__generator_8h.html">include/faceloop_generator.h</a>&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="general__methods_8h.html">include/general_methods.h</a>&quot;</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="planar__graph__generator_8h.html">include/planar_graph_generator.h</a>&quot;</span></div><div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a71064b70dc7b2e65c2aa8a0555cf2efd">    4</a></span>&#160;<span class="preprocessor">#define epsil 0.000001</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="classbasic__loop.html#a400c87feeca18d4e1c5885adccc5b3a1">    9</a></span>&#160;<a class="code" href="classbasic__loop.html#a400c87feeca18d4e1c5885adccc5b3a1">basic_loop :: basic_loop</a>(std::vector&lt;edge_3d&gt; loop, <span class="keywordtype">bool</span> inner)</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;{</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;    this-&gt;inner = <a class="code" href="classbasic__loop.html#a79ff39c7f385ef03176dca8c675844fe">inner</a>;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : loop)</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    {</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;        <a class="code" href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">edge_list</a>.push_back(z);</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    }</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;}</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="classface__loop.html#ad4fd127145cf380521f434dbc0d80828">   18</a></span>&#160;<a class="code" href="classface__loop.html#ad4fd127145cf380521f434dbc0d80828">face_loop :: face_loop</a>(std::vector&lt; basic_loop &gt; basic_loop_list, <a class="code" href="classplane.html">plane</a> p)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    this-&gt;p.<a class="code" href="classplane.html#a93c319b577955eca012b2866db926c1f">a</a> = p.<a class="code" href="classplane.html#a93c319b577955eca012b2866db926c1f">a</a>;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    this-&gt;p.<a class="code" href="classplane.html#af4a97d4328067448317dd787e048bc70">b</a> = p.<a class="code" href="classplane.html#af4a97d4328067448317dd787e048bc70">b</a>;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    this-&gt;p.<a class="code" href="classplane.html#a3024e149a5b2cb4697fa71ae7d539bd1">c</a> = p.<a class="code" href="classplane.html#a3024e149a5b2cb4697fa71ae7d539bd1">c</a>;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    this-&gt;p.<a class="code" href="classplane.html#a9a3cb65698785bad8199e7afbd083e27">d</a> = p.<a class="code" href="classplane.html#a9a3cb65698785bad8199e7afbd083e27">d</a>;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : basic_loop_list)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    {</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;        this-&gt;basic_loop_list.push_back(z);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    }</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;}</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classface__loop.html#a52dba7a417fc35be60db0b120004c499">   31</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classface__loop.html#a52dba7a417fc35be60db0b120004c499">face_loop :: add_basic_loop</a>(<a class="code" href="classbasic__loop.html">basic_loop</a> bl)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    basic_loop_list.push_back(bl);</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;}</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#ae6b709b480a42b239420e2f968bf4a6c">   36</a></span>&#160;std::vector&lt; face_loop &gt; <a class="code" href="faceloop__generator_8cpp.html#ae6b709b480a42b239420e2f968bf4a6c">generate_face_loops</a>(<a class="code" href="classplane.html">plane</a> p, std::vector&lt;int&gt; vertices_on_the_plane,</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        std::vector&lt;edge_3d&gt; &amp;edges_on_the_plane, std::vector&lt;vertex_3d&gt; v3d_list)</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;1\n&quot;;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    std::vector&lt; std::vector&lt;int&gt; &gt; ordered_adj_list = <a class="code" href="faceloop__generator_8cpp.html#aadb442650ebd831d3c7fda4a627d1ace">generate_ordered_adj_list</a>(edges_on_the_plane,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;     vertices_on_the_plane, v3d_list);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;2\n&quot;;int y=0;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="comment">// for(auto z : ordered_adj_list){</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="comment">//  cout&lt;&lt;++y&lt;&lt;&quot; -&gt; &quot;;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="comment">//  for(auto zz : z) cout&lt;&lt;zz+1&lt;&lt;&#39; &#39;;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="comment">//  cout&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    std::vector&lt; basic_loop &gt; basic_loop_list = <a class="code" href="faceloop__generator_8cpp.html#a7a4a04f233606e5f06164dc9a97b47a5">basic_loop_generator</a>(edges_on_the_plane, ordered_adj_list);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;3\n&quot;; int ind=0;</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="comment">// for(auto z : basic_loop_list){</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="comment">//  cout&lt;&lt;&quot;Basic Loop: #&quot;&lt;&lt;ind++&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">//  for(auto zzzz : z.edge_list){</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">//      cout&lt;&lt;&quot;edge&quot;&lt;&lt;&#39; &#39;&lt;&lt;zzzz.f&lt;&lt;&#39; &#39;&lt;&lt;zzzz.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">//  }</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    std::vector&lt; std::vector&lt;bool&gt; &gt; inclusion_matrix = <a class="code" href="faceloop__generator_8cpp.html#a9a32da1f4ab031ab685165a2ac99dab8">generate_inclusion_matrix</a>(basic_loop_list, v3d_list);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;4\n&quot;;</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    std::vector&lt; face_loop &gt; ans;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    std::vector&lt; bool &gt; done(basic_loop_list.size(),<span class="keyword">false</span>);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordtype">int</span> count=done.size();</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="comment">// int i=0;</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="comment">// for(auto zzz : basic_loop_list){i++;</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="comment">//  cout&lt;&lt;&quot;Basic Loop: #&quot;&lt;&lt;i&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="comment">//  for(auto zzzz : zzz.edge_list){</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="comment">//      cout&lt;&lt;&quot;edge&quot;&lt;&lt;&#39; &#39;&lt;&lt;zzzz.f&lt;&lt;&#39; &#39;&lt;&lt;zzzz.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="comment">//  }</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;&lt;&lt;\n&quot;;</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="comment">// for(auto z : inclusion_matrix){</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="comment">//  for(auto zz : z)cout&lt;&lt;zz&lt;&lt;&#39; &#39;;cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;&gt;&gt;\n&quot;;</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordflow">while</span>(count &gt; 0){</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        std::vector&lt;basic_loop&gt; curr_basic_loop_list;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;done.size();i++){ <span class="keywordflow">if</span>(done[i]) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;            <span class="keywordtype">int</span> included_by=0;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j&lt;done.size();j++){</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                <span class="keywordflow">if</span>(inclusion_matrix[j][i]) {included_by++;<span class="keywordflow">break</span>;}</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;            }</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;            <span class="keywordflow">if</span>(included_by==0){</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                <span class="comment">// cout&lt;&lt;&quot;YAHPPPPPPPPPPPPPPPPPPPPPP\n&quot;;</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                curr_basic_loop_list.pb(basic_loop_list[i]); count--;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                done[i]=<span class="keyword">true</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j&lt;done.size();j++){ <span class="keywordflow">if</span>(done[j]) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;                    <span class="keywordflow">if</span>(inclusion_matrix[i][j]){</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;                    basic_loop_list[j].inner = <span class="keyword">true</span>;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                    <span class="comment">// cout&lt;&lt;&quot;INNER HAI Be\n&quot;;</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                    <span class="comment">// cout&lt;&lt;basic_loop_list[j].inner&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                    curr_basic_loop_list.pb(basic_loop_list[j]);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                    count--; done[j]=<span class="keyword">true</span>;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                    }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                }</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;            }</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        }</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <a class="code" href="classface__loop.html">face_loop</a> curr(curr_basic_loop_list,p);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        ans.pb(curr);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    }</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;3\n&quot;; int ind=0;</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="comment">// for(auto z : basic_loop_list){</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="comment">//  cout&lt;&lt;&quot;Basic Loop: #&quot;&lt;&lt;ind++&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="comment">//  for(auto zzzz : z.edge_list){</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="comment">//      cout&lt;&lt;&quot;edge&quot;&lt;&lt;&#39; &#39;&lt;&lt;zzzz.f&lt;&lt;&#39; &#39;&lt;&lt;zzzz.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="comment">//  }</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordflow">return</span> ans;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a67ea41ab7b651bc5783a4a43a9e1eaea">  111</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="faceloop__generator_8cpp.html#a67ea41ab7b651bc5783a4a43a9e1eaea">compare_angles</a>(std::pair&lt; <span class="keywordtype">int</span>,std::pair&lt;float,bool&gt; &gt; lhs,</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; std::pair&lt; <span class="keywordtype">int</span>,std::pair&lt;float,bool&gt; &gt; rhs)</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">if</span>(lhs.S.S == <span class="keyword">false</span> &amp;&amp; rhs.S.S == <span class="keyword">false</span>) <span class="keywordflow">return</span> (lhs.S.F &gt; rhs.S.F);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordflow">if</span>(lhs.S.S == <span class="keyword">true</span> &amp;&amp; rhs.S.S == <span class="keyword">true</span>)   <span class="keywordflow">return</span> (lhs.S.F &lt; rhs.S.F);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">if</span>(lhs.S.S == <span class="keyword">true</span>  &amp;&amp; rhs.S.S == <span class="keyword">false</span>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keywordflow">if</span>(lhs.S.S == <span class="keyword">false</span> &amp;&amp; rhs.S.S == <span class="keyword">true</span>)  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment">// sort the edges on the basis of clockwise direction</span></div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a0e4704601381cabb530aa622af4b55d0">  121</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="faceloop__generator_8cpp.html#a0e4704601381cabb530aa622af4b55d0">sort_edges</a>(std::vector&lt;int&gt; &amp;v,<span class="keywordtype">int</span> i, std::vector&lt;vertex_3d&gt; v3d_list)</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;{</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keywordflow">if</span>(v.size() &lt;= 1) <span class="keywordflow">return</span> ;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <a class="code" href="classvertex__3d.html">vertex_3d</a> v1,v2,v3,v4;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    v1 = v3d_list[v[0]];</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    v1.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3d_list[i]);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="comment">// pair&lt;f,s&gt; f = angle b/w v1 and v[j]-v[i], s = up or down</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    v2 = v3d_list[v[1]];</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    v2.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3d_list[i]);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    v2 = <a class="code" href="general__methods_8h.html#a2dc9a47107e3f17fb944f6077f942236">cross_product</a>(v1,v2);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    std::vector&lt; std::pair&lt; int,std::pair&lt;float,bool&gt; &gt; &gt; vec;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="comment">// v2 is reference cross product for upper or lower halver distinguising</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : v){</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        std::pair&lt; int,std::pair&lt;float,bool&gt; &gt; ele;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        v3 = v3d_list[z];</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        v3.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3d_list[i]);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        ele.second.first = <a class="code" href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a>(v3,v1);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        ele.second.first /= v1.<a class="code" href="classvertex__3d.html#a9762b3e926a8b7aca495abc685b30432">length_of_it</a>() * v3.<a class="code" href="classvertex__3d.html#a9762b3e926a8b7aca495abc685b30432">length_of_it</a>();</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        v3 = <a class="code" href="general__methods_8h.html#a2dc9a47107e3f17fb944f6077f942236">cross_product</a>(v1,v3);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <span class="keywordtype">float</span> dir = <a class="code" href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a>(v2,v3);</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">if</span>(dir &gt;= 0) ele.second.second = <span class="keyword">true</span>;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="keywordflow">else</span> ele.second.second = <span class="keyword">false</span>;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        ele.first = z;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        vec.push_back(ele);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    }</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    std::sort(vec.begin(),vec.end(),<a class="code" href="faceloop__generator_8cpp.html#a67ea41ab7b651bc5783a4a43a9e1eaea">compare_angles</a>);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    v.clear();</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : vec) v.pb(z.F);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;}</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#aadb442650ebd831d3c7fda4a627d1ace">  152</a></span>&#160;std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code" href="faceloop__generator_8cpp.html#aadb442650ebd831d3c7fda4a627d1ace">generate_ordered_adj_list</a>(std::vector&lt;edge_3d&gt; edges_on_the_plane, std::vector&lt;int&gt; vertices_on_the_plane, std::vector&lt;vertex_3d&gt; v3d_list)</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;{</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    std::vector&lt; std::vector&lt;int&gt; &gt; adj_list = <a class="code" href="planar__graph__generator_8h.html#a077660a929dda9adf2f8a2daa6a563c1">get_adj_list</a>(edges_on_the_plane,v3d_list.size());</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">// get_adj_list is called from planar_graph_generator</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : vertices_on_the_plane)</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    {</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <a class="code" href="faceloop__generator_8cpp.html#a0e4704601381cabb530aa622af4b55d0">sort_edges</a>(adj_list[z],z,v3d_list);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="comment">// sort the adjacent list at z index as z is referenced from main v3d list</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    }</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">return</span> adj_list;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;}</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a7a4a04f233606e5f06164dc9a97b47a5">  168</a></span>&#160;std::vector&lt; basic_loop &gt; <a class="code" href="faceloop__generator_8cpp.html#a7a4a04f233606e5f06164dc9a97b47a5">basic_loop_generator</a>(std::vector&lt;edge_3d&gt; &amp;edges_on_the_plane,</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        std::vector&lt; vector&lt;int&gt; &gt; ordered_adj_list)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    std::vector&lt;bool&gt; visited(edges_on_the_plane.size(),<span class="keyword">false</span>);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordtype">int</span> Vstart,Vend,Vnext,Vstart_prev;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    std::vector&lt; basic_loop &gt; ans;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    std::vector&lt; edge_3d &gt; loop;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordflow">while</span>(1){</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        loop.clear();</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <span class="keywordtype">int</span> j=-1;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;visited.size();i++){</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            <span class="keywordflow">if</span>(!visited[i]) {j=i;<span class="keywordflow">break</span>;}</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        }</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordflow">if</span>(j==-1) <span class="keywordflow">break</span>; <span class="keywordtype">int</span> k; visited[j]=<span class="keyword">true</span>;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;edges_on_the_plane \n&quot;;</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        <span class="comment">// for(auto z : edges_on_the_plane) cout&lt;&lt;z.f&lt;&lt;&#39; &#39;&lt;&lt;z.s&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;end\n&quot;;</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        Vstart = edges_on_the_plane[j].f;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        Vend = edges_on_the_plane[j].s;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;Vstart &quot;&lt;&lt;Vstart&lt;&lt;&#39; &#39;&lt;&lt;Vend&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        loop.pb(<a class="code" href="classedge__3d.html">edge_3d</a> (Vend,Vstart));</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        Vstart_prev = Vend;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="keywordflow">while</span>(Vstart != Vend){</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;ordered_adj_list[Vstart].size();i++){</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;                <span class="keywordflow">if</span>(ordered_adj_list[Vstart][i] == Vstart_prev){</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;                    k=i; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                }</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;            }</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            <span class="keywordflow">if</span>(k == ordered_adj_list[Vstart].size()-1) Vnext = ordered_adj_list[Vstart][0];</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;            <span class="keywordflow">else</span> Vnext = ordered_adj_list[Vstart][k+1];</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            <a class="code" href="classedge__3d.html">edge_3d</a> eNext(Vstart,Vnext); <a class="code" href="classedge__3d.html">edge_3d</a> eNext1(Vnext,Vstart);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;            Vstart_prev = Vstart;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;            Vstart = Vnext;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            <span class="comment">// cout&lt;&lt;Vstart&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            <span class="comment">// cout&lt;&lt;eNext.f&lt;&lt;&#39; &#39;&lt;&lt;eNext.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;            <span class="comment">// cout&lt;&lt;eNext1.f&lt;&lt;&#39; &#39;&lt;&lt;eNext1.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;            loop.pb(eNext);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;edges_on_the_plane.size();i++){</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                <span class="keywordflow">if</span>(edges_on_the_plane[i] == eNext) {visited[i]=<span class="keyword">true</span>;j=i;<span class="keywordflow">break</span>;}</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;                <span class="keywordflow">if</span>(edges_on_the_plane[i] == eNext1) {visited[i]=<span class="keyword">true</span>;j=i;<span class="keywordflow">break</span>;}</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;            }</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        }</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;loop =&gt;\n&quot;;</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="comment">// for(auto z : loop) cout&lt;&lt;z.f&lt;&lt;&#39; &#39;&lt;&lt;z.s&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;loop done\n&quot;;</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        ans.pb(<a class="code" href="classbasic__loop.html">basic_loop</a> (loop,<span class="keyword">false</span>));</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="comment">// cout&lt;&lt;&quot;done\n&quot;;</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="keywordflow">return</span> ans;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a00972a0826ec9a1e09355a4d7085b06b">  222</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="faceloop__generator_8cpp.html#a00972a0826ec9a1e09355a4d7085b06b">is_in_it</a>(<a class="code" href="classvertex__3d.html">vertex_3d</a> v1, <a class="code" href="classbasic__loop.html">basic_loop</a> b, std::vector&lt;vertex_3d&gt; v3d_list){</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordtype">bool</span> final_ans = <span class="keyword">true</span>;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> wq=0;wq&lt;b.<a class="code" href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">edge_list</a>.size();wq++){</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        <a class="code" href="classvertex__3d.html">vertex_3d</a> v2,v3,v4,e,f,g,e1,v5,v6; v2 = v3d_list[b.<a class="code" href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">edge_list</a>[wq].f];</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <span class="keywordtype">int</span> cnt=0; e = v1; e.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v2);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        <span class="keywordtype">float</span> a,h,k;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        std::vector&lt;vertex_3d&gt; intersections_list;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;here we go \n&quot;;</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        <span class="comment">// v1.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <span class="comment">// v2.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : b.<a class="code" href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">edge_list</a>){</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;            e = v1; e.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v2);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;            v3 = v3d_list[z.f]; v4 = v3d_list[z.s];</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;            <span class="comment">// v3.printit(); cout&lt;&lt;&#39; &#39;; v4.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;            f = v3; f.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v4);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;            g = v1; g.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;            <span class="comment">// e.printit(); cout&lt;&lt;&#39;\n&#39;; f.printit(); cout&lt;&lt;&#39;\n&#39;; g.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            g = <a class="code" href="general__methods_8h.html#a2dc9a47107e3f17fb944f6077f942236">cross_product</a>(e,g);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;            e1 = e;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;            e = <a class="code" href="general__methods_8h.html#a2dc9a47107e3f17fb944f6077f942236">cross_product</a>(e,f);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;            <span class="comment">// g.printit(); cout&lt;&lt;&#39; &#39;; e.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;            a = <a class="code" href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a>(e,g);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;            h = g.<a class="code" href="classvertex__3d.html#a9762b3e926a8b7aca495abc685b30432">length_of_it</a>();k = e.<a class="code" href="classvertex__3d.html#a9762b3e926a8b7aca495abc685b30432">length_of_it</a>();</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;            <span class="comment">//if(std::abs(h) &lt; epsil || std::abs(k) &lt; epsil) continue;</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;            <span class="comment">// cout&lt;&lt;a&lt;&lt;&#39; &#39;&lt;&lt;h&lt;&lt;&#39; &#39;&lt;&lt;k&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;            <span class="keywordflow">if</span>(std::abs(k) &lt; <a class="code" href="faceloop__generator_8cpp.html#a71064b70dc7b2e65c2aa8a0555cf2efd">epsil</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            h /= k; <span class="keywordflow">if</span>(a &gt; 0) h = -h;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;            f.<a class="code" href="classvertex__3d.html#a3f42c81ecbe6cab86cda63854c7799c8">x</a> *= h; f.<a class="code" href="classvertex__3d.html#a44d8a3570860630dc76bfa0817786a9b">y</a> *= h; f.<a class="code" href="classvertex__3d.html#a9028d1e6317552f63d6cbd57ff5a42ba">z</a> *= h;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            v3.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(f);</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            <span class="comment">// v3 is the intersection</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            v5 = v3; v6 = v3;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            v5.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3d_list[z.f]); v6.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v3d_list[z.s]);</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;            <span class="keywordtype">float</span> lets_decide = <a class="code" href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a>(v5,v6);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            <span class="keywordflow">if</span>(lets_decide &lt;= 0)</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;            intersections_list.pb(v3);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;            <span class="comment">// cout&lt;&lt;&quot;The inetersection :&quot;; v3.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        }</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;done\n\n&quot;;</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <span class="comment">// v1.printit(); cout&lt;&lt;&#39; &#39;; v2.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;intersections_list&quot;&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="comment">// for(auto z : intersections_list) z.printit(), cout&lt;&lt;&#39; &#39;;</span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;\n end of intersections_list \n&quot;;</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">if</span>(intersections_list.size() &lt; 2) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        <span class="comment">// removed this part as a vertex should be counted twice</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        std::vector&lt;bool&gt; remove_them(intersections_list.size(), <span class="keyword">false</span>);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;intersections_list.size();i++){</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=i+1;j&lt;intersections_list.size();j++){</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;                <span class="keywordtype">float</span> x,y,z,x1,y1,z1;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;                x  = intersections_list[i].x; y  = intersections_list[i].y; z = intersections_list[i].z;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                x1 = intersections_list[j].x; y1 = intersections_list[j].y; z1 = intersections_list[j].z;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;                x -= x1; y-=y1; z-=z1; x*=x; y*=y; z*=z;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;                x += y+z;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;                <span class="keywordflow">if</span>(x &lt; <a class="code" href="faceloop__generator_8cpp.html#a71064b70dc7b2e65c2aa8a0555cf2efd">epsil</a>){</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;                    remove_them[i]=<span class="keyword">true</span>; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;                }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;            }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        }</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=remove_them.size()-1;i&gt;=0;i--){</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;            <span class="keywordflow">if</span>(remove_them[i]) intersections_list.erase(intersections_list.begin()+i);</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        v2 = intersections_list[0]; v2.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v1);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <span class="keywordflow">if</span>(intersections_list.size() &lt; 2) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=1;i&lt;intersections_list.size();i++){</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            v3=intersections_list[i]; v3.<a class="code" href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">shift_it</a>(v1);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;            a = <a class="code" href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a>(v2,v3);</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;            <span class="keywordflow">if</span>(a &gt; 0) cnt++;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        }</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        cnt++;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">if</span>(cnt%2) final_ans = final_ans &amp; <span class="keyword">true</span>;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">else</span> final_ans = final_ans &amp; <span class="keyword">false</span>;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    }</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordflow">return</span> final_ans;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="comment">// old--&gt; jo shi chal rha tha</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="comment">// vertex_3d v2,v3,v4,e,f,g,e1,v5,v6; v2 = v3d_list[b.edge_list[0].f];</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <span class="comment">// int cnt=0; e = v1; e.shift_it(v2);</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="comment">// float a,h,k;</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="comment">// std::vector&lt;vertex_3d&gt; intersections_list;</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="comment">// // cout&lt;&lt;&quot;here we go \n&quot;;</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="comment">// // v1.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="comment">// // v2.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="comment">// for(auto z : b.edge_list){</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">//  e = v1; e.shift_it(v2);</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="comment">//  v3 = v3d_list[z.f]; v4 = v3d_list[z.s];</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="comment">//  // v3.printit(); cout&lt;&lt;&#39; &#39;; v4.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="comment">//  f = v3; f.shift_it(v4);</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="comment">//  g = v1; g.shift_it(v3);</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="comment">//  // e.printit(); cout&lt;&lt;&#39;\n&#39;; f.printit(); cout&lt;&lt;&#39;\n&#39;; g.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="comment">//  g = cross_product(e,g);</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <span class="comment">//  e1 = e;</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="comment">//  e = cross_product(e,f);</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="comment">//  // g.printit(); cout&lt;&lt;&#39; &#39;; e.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="comment">//  a = dot_product(e,g);</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    <span class="comment">//  h = g.length_of_it();k = e.length_of_it();</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="comment">//  //if(std::abs(h) &lt; epsil || std::abs(k) &lt; epsil) continue;</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="comment">//  // cout&lt;&lt;a&lt;&lt;&#39; &#39;&lt;&lt;h&lt;&lt;&#39; &#39;&lt;&lt;k&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="comment">//  if(std::abs(k) &lt; epsil) continue;</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="comment">//  h /= k; if(a &gt; 0) h = -h;</span></div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="comment">//  f.x *= h; f.y *= h; f.z *= h;</span></div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="comment">//  v3.shift_it(f);</span></div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    <span class="comment">//  // v3 is the intersection</span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="comment">//  v5 = v3; v6 = v3;</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    <span class="comment">//  v5.shift_it(v3d_list[z.f]); v6.shift_it(v3d_list[z.s]);</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="comment">//  float lets_decide = dot_product(v5,v6);</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">//  if(lets_decide &lt;= 0)</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    <span class="comment">//  intersections_list.pb(v3);</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="comment">//  else continue;</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="comment">//  // cout&lt;&lt;&quot;The inetersection :&quot;; v3.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="comment">// // cout&lt;&lt;&quot;done\n\n&quot;;</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <span class="comment">// // v1.printit(); cout&lt;&lt;&#39; &#39;; v2.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="comment">// // cout&lt;&lt;&quot;intersections_list&quot;&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="comment">// // for(auto z : intersections_list) z.printit(), cout&lt;&lt;&#39; &#39;;</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <span class="comment">// // cout&lt;&lt;&quot;\n end of intersections_list \n&quot;;</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="comment">// if(intersections_list.size() &lt; 2) return false;</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="comment">// // removed this part as a vertex should be counted twice</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="comment">// std::vector&lt;bool&gt; remove_them(intersections_list.size(), false);</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    <span class="comment">// for(int i=0;i&lt;intersections_list.size();i++){</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="comment">//  for(int j=i+1;j&lt;intersections_list.size();j++){</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    <span class="comment">//      float x,y,z,x1,y1,z1;</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="comment">//      x  = intersections_list[i].x; y  = intersections_list[i].y; z = intersections_list[i].z;</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="comment">//      x1 = intersections_list[j].x; y1 = intersections_list[j].y; z1 = intersections_list[j].z;</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    <span class="comment">//      x -= x1; y-=y1; z-=z1; x*=x; y*=y; z*=z;</span></div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="comment">//      x += y+z;</span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="comment">//      if(x &lt; epsil){</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="comment">//          remove_them[i]=true; break;</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="comment">//      }</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="comment">//  }</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="comment">// for(int i=remove_them.size()-1;i&gt;=0;i--){</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="comment">//  if(remove_them[i]) intersections_list.erase(intersections_list.begin()+i);</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="comment">// v2 = intersections_list[0]; v2.shift_it(v1);</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="comment">// if(intersections_list.size() &lt; 2) return false;</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="comment">// for(int i=1;i&lt;intersections_list.size();i++){</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="comment">//  v3=intersections_list[i]; v3.shift_it(v1);</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <span class="comment">//  a = dot_product(v2,v3);</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="comment">//  if(a &gt; 0) cnt++;</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    <span class="comment">// }</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="comment">// cnt++;</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="comment">// // v1.printit();cout&lt;&lt;&#39; &#39;&lt;&lt;cnt&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="comment">// if(cnt%2) return true;</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="comment">// return false;</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;}</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#afa2e3a07821dc9581a2368710a15211c">  375</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="faceloop__generator_8cpp.html#afa2e3a07821dc9581a2368710a15211c">included</a>(<a class="code" href="classbasic__loop.html">basic_loop</a> b1, <a class="code" href="classbasic__loop.html">basic_loop</a> b2, std::vector&lt;vertex_3d&gt; v3d_list){</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <span class="keywordtype">bool</span> ans = <span class="keyword">true</span>; <a class="code" href="classvertex__3d.html">vertex_3d</a> a,b;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : b2.<a class="code" href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">edge_list</a>){</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        a = v3d_list[z.f]; b = v3d_list[z.s];</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="comment">// cout&lt;&lt;&quot;included&quot;&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        <span class="comment">// a.printit(); cout&lt;&lt;&#39; &#39;;</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="comment">// b.printit(); cout&lt;&lt;&#39;\n&#39;;</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        <span class="keywordflow">if</span>((!(<a class="code" href="faceloop__generator_8cpp.html#a00972a0826ec9a1e09355a4d7085b06b">is_in_it</a>(a,b1,v3d_list))) || (!(<a class="code" href="faceloop__generator_8cpp.html#a00972a0826ec9a1e09355a4d7085b06b">is_in_it</a>(b,b1,v3d_list))))</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;        {</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;            <span class="comment">// cout&lt;&lt;(is_in_it(a,b1,v3d_list))&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;            <span class="comment">// cout&lt;&lt;(is_in_it(b,b1,v3d_list))&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;            ans=<span class="keyword">false</span>;<span class="keywordflow">break</span>;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        }</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    }</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keywordflow">return</span> ans;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;}</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="faceloop__generator_8cpp.html#a9a32da1f4ab031ab685165a2ac99dab8">  392</a></span>&#160;std::vector&lt; std::vector&lt;bool&gt; &gt; <a class="code" href="faceloop__generator_8cpp.html#a9a32da1f4ab031ab685165a2ac99dab8">generate_inclusion_matrix</a>(std::vector&lt; basic_loop &gt; basic_loop_list,</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        std::vector&lt;vertex_3d&gt; v3d_list)</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    std::vector&lt; std::vector&lt;bool&gt; &gt; ans(basic_loop_list.size());</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span> z : ans){</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;basic_loop_list.size();i++) z.pb(<span class="keyword">false</span>);</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    }</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;ans.size();i++){</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j&lt;ans.size();j++){</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;            <span class="keywordflow">if</span>(i == j) {ans[i].pb(<span class="keyword">false</span>);<span class="keywordflow">continue</span>;}</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;            <span class="keywordflow">if</span>( <a class="code" href="faceloop__generator_8cpp.html#afa2e3a07821dc9581a2368710a15211c">included</a>(basic_loop_list[i], basic_loop_list[j], v3d_list)) {ans[i].pb(<span class="keyword">true</span>);}</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;            <span class="keywordflow">else</span> ans[i].pb(<span class="keyword">false</span>);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        }</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    }</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <span class="keywordflow">return</span> ans;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;}</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="ttc" id="classface__loop_html"><div class="ttname"><a href="classface__loop.html">face_loop</a></div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8h_source.html#l00025">faceloop_generator.h:25</a></div></div>
<div class="ttc" id="planar__graph__generator_8h_html_a077660a929dda9adf2f8a2daa6a563c1"><div class="ttname"><a href="planar__graph__generator_8h.html#a077660a929dda9adf2f8a2daa6a563c1">get_adj_list</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; get_adj_list(std::vector&lt; edge_3d &gt; e3d_list, int no_of_vertices)</div><div class="ttdoc">function that returns adjacency edges list of the vertex_3d list </div><div class="ttdef"><b>Definition:</b> <a href="planar__graph__generator_8cpp_source.html#l00049">planar_graph_generator.cpp:49</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a71064b70dc7b2e65c2aa8a0555cf2efd"><div class="ttname"><a href="faceloop__generator_8cpp.html#a71064b70dc7b2e65c2aa8a0555cf2efd">epsil</a></div><div class="ttdeci">#define epsil</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00004">faceloop_generator.cpp:4</a></div></div>
<div class="ttc" id="classvertex__3d_html"><div class="ttname"><a href="classvertex__3d.html">vertex_3d</a></div><div class="ttdoc">class for a vertex_3d </div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00064">structs.h:64</a></div></div>
<div class="ttc" id="classvertex__3d_html_a44d8a3570860630dc76bfa0817786a9b"><div class="ttname"><a href="classvertex__3d.html#a44d8a3570860630dc76bfa0817786a9b">vertex_3d::y</a></div><div class="ttdeci">float y</div><div class="ttdoc">y-coordinate of the vertex </div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00067">structs.h:67</a></div></div>
<div class="ttc" id="classplane_html_af4a97d4328067448317dd787e048bc70"><div class="ttname"><a href="classplane.html#af4a97d4328067448317dd787e048bc70">plane::b</a></div><div class="ttdeci">float b</div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00116">structs.h:116</a></div></div>
<div class="ttc" id="classvertex__3d_html_a9028d1e6317552f63d6cbd57ff5a42ba"><div class="ttname"><a href="classvertex__3d.html#a9028d1e6317552f63d6cbd57ff5a42ba">vertex_3d::z</a></div><div class="ttdeci">float z</div><div class="ttdoc">z-coordinate of the vertex </div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00068">structs.h:68</a></div></div>
<div class="ttc" id="classface__loop_html_a52dba7a417fc35be60db0b120004c499"><div class="ttname"><a href="classface__loop.html#a52dba7a417fc35be60db0b120004c499">face_loop::add_basic_loop</a></div><div class="ttdeci">void add_basic_loop(basic_loop bl)</div><div class="ttdoc">function that adds basic loop in the basic_loop_list </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00031">faceloop_generator.cpp:31</a></div></div>
<div class="ttc" id="classbasic__loop_html_a81512ce2e37b1de9142568113140ace9"><div class="ttname"><a href="classbasic__loop.html#a81512ce2e37b1de9142568113140ace9">basic_loop::edge_list</a></div><div class="ttdeci">std::vector&lt; edge_3d &gt; edge_list</div><div class="ttdoc">vector of edges included in the loop </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8h_source.html#l00015">faceloop_generator.h:15</a></div></div>
<div class="ttc" id="classface__loop_html_ad4fd127145cf380521f434dbc0d80828"><div class="ttname"><a href="classface__loop.html#ad4fd127145cf380521f434dbc0d80828">face_loop::face_loop</a></div><div class="ttdeci">face_loop(std::vector&lt; basic_loop &gt; basic_loop_list, plane p)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00018">faceloop_generator.cpp:18</a></div></div>
<div class="ttc" id="classplane_html_a93c319b577955eca012b2866db926c1f"><div class="ttname"><a href="classplane.html#a93c319b577955eca012b2866db926c1f">plane::a</a></div><div class="ttdeci">float a</div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00115">structs.h:115</a></div></div>
<div class="ttc" id="classplane_html"><div class="ttname"><a href="classplane.html">plane</a></div><div class="ttdoc">class for a plane plane represented as (a,b,c,d) corresponding to the equation ax + by + cz = d ...</div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00113">structs.h:113</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a0e4704601381cabb530aa622af4b55d0"><div class="ttname"><a href="faceloop__generator_8cpp.html#a0e4704601381cabb530aa622af4b55d0">sort_edges</a></div><div class="ttdeci">void sort_edges(std::vector&lt; int &gt; &amp;v, int i, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00121">faceloop_generator.cpp:121</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a00972a0826ec9a1e09355a4d7085b06b"><div class="ttname"><a href="faceloop__generator_8cpp.html#a00972a0826ec9a1e09355a4d7085b06b">is_in_it</a></div><div class="ttdeci">bool is_in_it(vertex_3d v1, basic_loop b, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00222">faceloop_generator.cpp:222</a></div></div>
<div class="ttc" id="classvertex__3d_html_a3f42c81ecbe6cab86cda63854c7799c8"><div class="ttname"><a href="classvertex__3d.html#a3f42c81ecbe6cab86cda63854c7799c8">vertex_3d::x</a></div><div class="ttdeci">float x</div><div class="ttdoc">x-coordinate of the vertex </div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00066">structs.h:66</a></div></div>
<div class="ttc" id="general__methods_8h_html_a2dc9a47107e3f17fb944f6077f942236"><div class="ttname"><a href="general__methods_8h.html#a2dc9a47107e3f17fb944f6077f942236">cross_product</a></div><div class="ttdeci">vertex_3d cross_product(vertex_3d a, vertex_3d b)</div><div class="ttdef"><b>Definition:</b> <a href="general__methods_8cpp_source.html#l00005">general_methods.cpp:5</a></div></div>
<div class="ttc" id="classplane_html_a9a3cb65698785bad8199e7afbd083e27"><div class="ttname"><a href="classplane.html#a9a3cb65698785bad8199e7afbd083e27">plane::d</a></div><div class="ttdeci">float d</div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00118">structs.h:118</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_afa2e3a07821dc9581a2368710a15211c"><div class="ttname"><a href="faceloop__generator_8cpp.html#afa2e3a07821dc9581a2368710a15211c">included</a></div><div class="ttdeci">bool included(basic_loop b1, basic_loop b2, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00375">faceloop_generator.cpp:375</a></div></div>
<div class="ttc" id="classedge__3d_html"><div class="ttname"><a href="classedge__3d.html">edge_3d</a></div><div class="ttdoc">class for an edge_3d </div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00097">structs.h:97</a></div></div>
<div class="ttc" id="general__methods_8h_html"><div class="ttname"><a href="general__methods_8h.html">general_methods.h</a></div></div>
<div class="ttc" id="classbasic__loop_html"><div class="ttname"><a href="classbasic__loop.html">basic_loop</a></div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8h_source.html#l00012">faceloop_generator.h:12</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a9a32da1f4ab031ab685165a2ac99dab8"><div class="ttname"><a href="faceloop__generator_8cpp.html#a9a32da1f4ab031ab685165a2ac99dab8">generate_inclusion_matrix</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; bool &gt; &gt; generate_inclusion_matrix(std::vector&lt; basic_loop &gt; basic_loop_list, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdoc">function to generate inclusion matrix </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00392">faceloop_generator.cpp:392</a></div></div>
<div class="ttc" id="classvertex__3d_html_ab3b7d3a3201f4d9a4da75b5b1c379ac1"><div class="ttname"><a href="classvertex__3d.html#ab3b7d3a3201f4d9a4da75b5b1c379ac1">vertex_3d::shift_it</a></div><div class="ttdeci">void shift_it(vertex_3d ref_vertex)</div><div class="ttdoc">function to shift a vertex wrt to a reference vertex </div><div class="ttdef"><b>Definition:</b> <a href="structs_8cpp_source.html#l00077">structs.cpp:77</a></div></div>
<div class="ttc" id="classvertex__3d_html_a9762b3e926a8b7aca495abc685b30432"><div class="ttname"><a href="classvertex__3d.html#a9762b3e926a8b7aca495abc685b30432">vertex_3d::length_of_it</a></div><div class="ttdeci">float length_of_it()</div><div class="ttdoc">length of a vector </div><div class="ttdef"><b>Definition:</b> <a href="structs_8cpp_source.html#l00082">structs.cpp:82</a></div></div>
<div class="ttc" id="classbasic__loop_html_a400c87feeca18d4e1c5885adccc5b3a1"><div class="ttname"><a href="classbasic__loop.html#a400c87feeca18d4e1c5885adccc5b3a1">basic_loop::basic_loop</a></div><div class="ttdeci">basic_loop(std::vector&lt; edge_3d &gt; loop, bool inner)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00009">faceloop_generator.cpp:9</a></div></div>
<div class="ttc" id="classbasic__loop_html_a79ff39c7f385ef03176dca8c675844fe"><div class="ttname"><a href="classbasic__loop.html#a79ff39c7f385ef03176dca8c675844fe">basic_loop::inner</a></div><div class="ttdeci">bool inner</div><div class="ttdoc">bool is true if loop is inner </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8h_source.html#l00016">faceloop_generator.h:16</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a67ea41ab7b651bc5783a4a43a9e1eaea"><div class="ttname"><a href="faceloop__generator_8cpp.html#a67ea41ab7b651bc5783a4a43a9e1eaea">compare_angles</a></div><div class="ttdeci">bool compare_angles(std::pair&lt; int, std::pair&lt; float, bool &gt; &gt; lhs, std::pair&lt; int, std::pair&lt; float, bool &gt; &gt; rhs)</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00111">faceloop_generator.cpp:111</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_ae6b709b480a42b239420e2f968bf4a6c"><div class="ttname"><a href="faceloop__generator_8cpp.html#ae6b709b480a42b239420e2f968bf4a6c">generate_face_loops</a></div><div class="ttdeci">std::vector&lt; face_loop &gt; generate_face_loops(plane p, std::vector&lt; int &gt; vertices_on_the_plane, std::vector&lt; edge_3d &gt; &amp;edges_on_the_plane, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00036">faceloop_generator.cpp:36</a></div></div>
<div class="ttc" id="classplane_html_a3024e149a5b2cb4697fa71ae7d539bd1"><div class="ttname"><a href="classplane.html#a3024e149a5b2cb4697fa71ae7d539bd1">plane::c</a></div><div class="ttdeci">float c</div><div class="ttdef"><b>Definition:</b> <a href="structs_8h_source.html#l00117">structs.h:117</a></div></div>
<div class="ttc" id="general__methods_8h_html_adde63ba9542357791cc6a967f2ea582e"><div class="ttname"><a href="general__methods_8h.html#adde63ba9542357791cc6a967f2ea582e">dot_product</a></div><div class="ttdeci">float dot_product(vertex_3d a, vertex_3d b)</div><div class="ttdef"><b>Definition:</b> <a href="general__methods_8cpp_source.html#l00017">general_methods.cpp:17</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_aadb442650ebd831d3c7fda4a627d1ace"><div class="ttname"><a href="faceloop__generator_8cpp.html#aadb442650ebd831d3c7fda4a627d1ace">generate_ordered_adj_list</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; generate_ordered_adj_list(std::vector&lt; edge_3d &gt; edges_on_the_plane, std::vector&lt; int &gt; vertices_on_the_plane, std::vector&lt; vertex_3d &gt; v3d_list)</div><div class="ttdoc">function to generate ordered adj_list in clockwise direction </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00152">faceloop_generator.cpp:152</a></div></div>
<div class="ttc" id="faceloop__generator_8h_html"><div class="ttname"><a href="faceloop__generator_8h.html">faceloop_generator.h</a></div></div>
<div class="ttc" id="faceloop__generator_8cpp_html_a7a4a04f233606e5f06164dc9a97b47a5"><div class="ttname"><a href="faceloop__generator_8cpp.html#a7a4a04f233606e5f06164dc9a97b47a5">basic_loop_generator</a></div><div class="ttdeci">std::vector&lt; basic_loop &gt; basic_loop_generator(std::vector&lt; edge_3d &gt; &amp;edges_on_the_plane, std::vector&lt; vector&lt; int &gt; &gt; ordered_adj_list)</div><div class="ttdoc">function that generates basic loops </div><div class="ttdef"><b>Definition:</b> <a href="faceloop__generator_8cpp_source.html#l00168">faceloop_generator.cpp:168</a></div></div>
<div class="ttc" id="planar__graph__generator_8h_html"><div class="ttname"><a href="planar__graph__generator_8h.html">planar_graph_generator.h</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
